home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
PROGNG_C
/
12CUTILS.LZH
/
GTOJ.C
< prev
next >
Wrap
Text File
|
1984-04-05
|
2KB
|
55 lines
/* *** gtoj.c *** */
/* */
/* IBM - PC microsoft "C" */
/* */
/* integer function that returns the julian date (1 = 1st day AD) */
/* associated with a gregorian date in the form mm/dd/yy. Returns a */
/* -1 if an error occured. */
/* */
/* Written by L. Cuthbertson, March 1983. */
/* */
/*********************************************************************/
#define CENTRY 19 /* current century */
long gtoj(indate)
char indate[];
{
static int monthd[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int i;
int leapd,iyr,imo,iday;
static long cdays = 36524, ydays = 365;
/* convert into expanded format if necessary */
if ((cvtdate(indate)) != 0) return(-1);
/* parse gregorian date into its pieces */
sscanf(indate,"%2d%*1c%2d%*1c%2d",imo,iday,iyr);
/* adjust month array for leap year/non-leap year */
if (iyr < 0 || iyr > 99) return(-1);
if (iyr%4 == 0 && iyr != 0 || CENTRY%4 == 0)
monthd[1] = 29;
else
monthd[1] = 28;
/* check for invalid month */
if (imo < 1 || imo > 12) return(-1);
/* check for invalid day */
if (iday < 1 || iday > monthd[imo-1]) return(-1);
/* determine the number of "extra" leap years caused by the */
/* %400 criteria and add to it the number of leap years that */
/* has occured up to the prior year of current century. */
leapd = CENTRY/4;
if (iyr != 0) leapd += (iyr-1)/4;
/* determine number of days elapsed in current year */
for (i=0;i<(imo-1);i++)
iday = iday + monthd[i];
/* calculate julian date */
return (CENTRY*cdays + iyr*ydays + leapd + iday);
}